
<!doctype html>
<html lang="zh" class="no-js">
  <head>
    
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width,initial-scale=1">
      
        <meta name="description" content="脚本文档">
      
      
        <meta name="author" content="Logan">
      
      
        <link rel="canonical" href="http://localhost:8000/installation/docker/services/">
      
      
        <link rel="prev" href="../build/">
      
      
        <link rel="next" href="../network-storage/">
      
      
      <link rel="icon" href="../../../image/favicon.ico">
      <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.50">
    
    
      
        <title>常用服务部署 - 运维无忧文档</title>
      
    
    
      <link rel="stylesheet" href="../../../assets/stylesheets/main.a40c8224.min.css">
      
        
        <link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
      
      


    
    
      
    
    
      
        
        
        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
        <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
      
    
    
      <link rel="stylesheet" href="../../../css/extra.css">
    
      <link rel="stylesheet" href="../../../css/prism.css">
    
    <script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
    
      

    
    
    
  </head>
  
  
    
    
      
    
    
    
    
    <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue">
  
    
    <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
    <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
    <label class="md-overlay" for="__drawer"></label>
    <div data-md-component="skip">
      
        
        <a href="#docker" class="md-skip">
          跳转至
        </a>
      
    </div>
    <div data-md-component="announce">
      
    </div>
    
    
      

  

<header class="md-header md-header--shadow" data-md-component="header">
  <nav class="md-header__inner md-grid" aria-label="页眉">
    <a href="../../.." title="运维无忧文档" class="md-header__button md-logo" aria-label="运维无忧文档" data-md-component="logo">
      
  <img src="../../../image/logo.png" alt="logo">

    </a>
    <label class="md-header__button md-icon" for="__drawer">
      
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
    </label>
    <div class="md-header__title" data-md-component="header-title">
      <div class="md-header__ellipsis">
        <div class="md-header__topic">
          <span class="md-ellipsis">
            运维无忧文档
          </span>
        </div>
        <div class="md-header__topic" data-md-component="header-topic">
          <span class="md-ellipsis">
            
              常用服务部署
            
          </span>
        </div>
      </div>
    </div>
    
      
        <form class="md-header__option" data-md-component="palette">
  
    
    
    
    <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue"  aria-label="Switch to dark mode"  type="radio" name="__palette" id="__palette_0">
    
      <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0-7 2.39 3.42C13.65 5.15 12.84 5 12 5s-1.65.15-2.39.42zM3.34 7l4.16-.35A7.2 7.2 0 0 0 5.94 8.5c-.44.74-.69 1.5-.83 2.29zm.02 10 1.76-3.77a7.131 7.131 0 0 0 2.38 4.14zM20.65 7l-1.77 3.79a7.02 7.02 0 0 0-2.38-4.15zm-.01 10-4.14.36c.59-.51 1.12-1.14 1.54-1.86.42-.73.69-1.5.83-2.29zM12 22l-2.41-3.44c.74.27 1.55.44 2.41.44.82 0 1.63-.17 2.37-.44z"/></svg>
      </label>
    
  
    
    
    
    <input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="blue"  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
    
      <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3zm3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95zm-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31"/></svg>
      </label>
    
  
</form>
      
    
    
      <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
    
    
    
      <label class="md-header__button md-icon" for="__search">
        
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
      </label>
      <div class="md-search" data-md-component="search" role="dialog">
  <label class="md-search__overlay" for="__search"></label>
  <div class="md-search__inner" role="search">
    <form class="md-search__form" name="search">
      <input type="text" class="md-search__input" name="query" aria-label="搜索" placeholder="搜索" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
      <label class="md-search__icon md-icon" for="__search">
        
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
        
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
      </label>
      <nav class="md-search__options" aria-label="查找">
        
        <button type="reset" class="md-search__icon md-icon" title="清空当前内容" aria-label="清空当前内容" tabindex="-1">
          
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
        </button>
      </nav>
      
    </form>
    <div class="md-search__output">
      <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
        <div class="md-search-result" data-md-component="search-result">
          <div class="md-search-result__meta">
            正在初始化搜索引擎
          </div>
          <ol class="md-search-result__list" role="presentation"></ol>
        </div>
      </div>
    </div>
  </div>
</div>
    
    
      <div class="md-header__source">
        <a href="https://git.opsx.vip/docs/wuyou.run.git" title="前往仓库" class="md-source" data-md-component="source">
  <div class="md-source__icon md-icon">
    
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
  </div>
  <div class="md-source__repository">
    wuyou.run
  </div>
</a>
      </div>
    
  </nav>
  
</header>
    
    <div class="md-container" data-md-component="container">
      
      
        
          
        
      
      <main class="md-main" data-md-component="main">
        <div class="md-main__inner md-grid">
          
            
              
              <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    



<nav class="md-nav md-nav--primary" aria-label="导航栏" data-md-level="0">
  <label class="md-nav__title" for="__drawer">
    <a href="../../.." title="运维无忧文档" class="md-nav__button md-logo" aria-label="运维无忧文档" data-md-component="logo">
      
  <img src="../../../image/logo.png" alt="logo">

    </a>
    运维无忧文档
  </label>
  
    <div class="md-nav__source">
      <a href="https://git.opsx.vip/docs/wuyou.run.git" title="前往仓库" class="md-source" data-md-component="source">
  <div class="md-source__icon md-icon">
    
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
  </div>
  <div class="md-source__repository">
    wuyou.run
  </div>
</a>
    </div>
  
  <ul class="md-nav__list" data-md-scrollfix>
    
      
      
  
  
  
  
    <li class="md-nav__item">
      <a href="../../.." class="md-nav__link">
        
  
  <span class="md-ellipsis">
    首页
  </span>
  

      </a>
    </li>
  

    
      
      
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
        
          
          <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    Linux基础设施
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_2">
            <span class="md-nav__icon md-icon"></span>
            Linux基础设施
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1" >
        
          
          <label class="md-nav__link" for="__nav_2_1" id="__nav_2_1_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    基础环境配置
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_1_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_2_1">
            <span class="md-nav__icon md-icon"></span>
            基础环境配置
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../system_init/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    系统初始化
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../dev_env/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    开发环境搭建
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

              
            
              
                
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_2" >
        
          
          <label class="md-nav__link" for="__nav_2_2" id="__nav_2_2_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    常用服务部署
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_2_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_2_2">
            <span class="md-nav__icon md-icon"></span>
            常用服务部署
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_2_1" >
        
          
          <label class="md-nav__link" for="__nav_2_2_1" id="__nav_2_2_1_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    Web服务与代理
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_2_1_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_2_2_1">
            <span class="md-nav__icon md-icon"></span>
            Web服务与代理
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../web_services/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    Web服务
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../proxy_services/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    代理服务
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../services-loadbalancing/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    负载均衡服务
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../cache_services/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    缓存加速服务
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

              
            
              
                
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_2_2" >
        
          
          <label class="md-nav__link" for="__nav_2_2_2" id="__nav_2_2_2_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    数据存储
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_2_2_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_2_2_2">
            <span class="md-nav__icon md-icon"></span>
            数据存储
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../database_services/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    数据库服务
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../storage_services/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    文件存储服务
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

              
            
              
                
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_2_3" >
        
          
          <label class="md-nav__link" for="__nav_2_2_3" id="__nav_2_2_3_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    监控与日志
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_2_3_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_2_2_3">
            <span class="md-nav__icon md-icon"></span>
            监控与日志
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../monitoring_services/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    监控系统
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../logging_services/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    日志管理
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../message_queue_services/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    消息队列
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

              
            
              
                
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3" >
        
          
          <label class="md-nav__link" for="__nav_2_3" id="__nav_2_3_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    系统运维
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_3_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_2_3">
            <span class="md-nav__icon md-icon"></span>
            系统运维
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../storage/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    存储与备份
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../lvm/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    LVM存储管理
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../network/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    网络服务配置
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../monitor/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    监控与日志
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

    
      
      
  
  
    
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--active md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
        
          
          <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    容器与编排
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
          <label class="md-nav__title" for="__nav_3">
            <span class="md-nav__icon md-icon"></span>
            容器与编排
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
    
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--active md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_1" checked>
        
          
          <label class="md-nav__link" for="__nav_3_1" id="__nav_3_1_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    Docker
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_1_label" aria-expanded="true">
          <label class="md-nav__title" for="__nav_3_1">
            <span class="md-nav__icon md-icon"></span>
            Docker
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    基础安装
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../build/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    镜像构建
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
    
  
  
  
    <li class="md-nav__item md-nav__item--active">
      
      <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
      
      
        
      
      
        <label class="md-nav__link md-nav__link--active" for="__toc">
          
  
  <span class="md-ellipsis">
    常用服务部署
  </span>
  

          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <a href="./" class="md-nav__link md-nav__link--active">
        
  
  <span class="md-ellipsis">
    常用服务部署
  </span>
  

      </a>
      
        

<nav class="md-nav md-nav--secondary" aria-label="目录">
  
  
  
    
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon"></span>
      目录
    </label>
    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#_1" class="md-nav__link">
    <span class="md-ellipsis">
      数据库服务
    </span>
  </a>
  
    <nav class="md-nav" aria-label="数据库服务">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#mysql" class="md-nav__link">
    <span class="md-ellipsis">
      MySQL部署
    </span>
  </a>
  
    <nav class="md-nav" aria-label="MySQL部署">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#mysql-80" class="md-nav__link">
    <span class="md-ellipsis">
      MySQL 8.0
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#mysql-57" class="md-nav__link">
    <span class="md-ellipsis">
      MySQL 5.7
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
        
          <li class="md-nav__item">
  <a href="#redis" class="md-nav__link">
    <span class="md-ellipsis">
      Redis部署
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#web" class="md-nav__link">
    <span class="md-ellipsis">
      Web服务
    </span>
  </a>
  
    <nav class="md-nav" aria-label="Web服务">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#nginx" class="md-nav__link">
    <span class="md-ellipsis">
      Nginx部署
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#tomcat" class="md-nav__link">
    <span class="md-ellipsis">
      Tomcat部署
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_2" class="md-nav__link">
    <span class="md-ellipsis">
      监控与日志
    </span>
  </a>
  
    <nav class="md-nav" aria-label="监控与日志">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#grafana" class="md-nav__link">
    <span class="md-ellipsis">
      Grafana部署
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#zabbix" class="md-nav__link">
    <span class="md-ellipsis">
      Zabbix部署
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_3" class="md-nav__link">
    <span class="md-ellipsis">
      开发工具
    </span>
  </a>
  
    <nav class="md-nav" aria-label="开发工具">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#gitlab" class="md-nav__link">
    <span class="md-ellipsis">
      GitLab部署
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#jenkins" class="md-nav__link">
    <span class="md-ellipsis">
      Jenkins部署
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_4" class="md-nav__link">
    <span class="md-ellipsis">
      消息队列
    </span>
  </a>
  
    <nav class="md-nav" aria-label="消息队列">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#rocketmq" class="md-nav__link">
    <span class="md-ellipsis">
      RocketMQ部署
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_5" class="md-nav__link">
    <span class="md-ellipsis">
      认证与授权
    </span>
  </a>
  
    <nav class="md-nav" aria-label="认证与授权">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#ldap" class="md-nav__link">
    <span class="md-ellipsis">
      LDAP部署
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#ldap_1" class="md-nav__link">
    <span class="md-ellipsis">
      LDAP密码自助服务部署
    </span>
  </a>
  
    <nav class="md-nav" aria-label="LDAP密码自助服务部署">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#ldap_2" class="md-nav__link">
    <span class="md-ellipsis">
      配置LDAP密码自助服务
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_6" class="md-nav__link">
    <span class="md-ellipsis">
      实际示例配置
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_7" class="md-nav__link">
    <span class="md-ellipsis">
      容器管理
    </span>
  </a>
  
    <nav class="md-nav" aria-label="容器管理">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#portainer" class="md-nav__link">
    <span class="md-ellipsis">
      Portainer部署
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_8" class="md-nav__link">
    <span class="md-ellipsis">
      代理与网关
    </span>
  </a>
  
    <nav class="md-nav" aria-label="代理与网关">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#frp" class="md-nav__link">
    <span class="md-ellipsis">
      Frp内网穿透
    </span>
  </a>
  
    <nav class="md-nav" aria-label="Frp内网穿透">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#frp_1" class="md-nav__link">
    <span class="md-ellipsis">
      Frp服务端
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#frp_2" class="md-nav__link">
    <span class="md-ellipsis">
      Frp客户端
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_9" class="md-nav__link">
    <span class="md-ellipsis">
      其他常用服务
    </span>
  </a>
  
    <nav class="md-nav" aria-label="其他常用服务">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#jumpserver" class="md-nav__link">
    <span class="md-ellipsis">
      JumpServer堡垒机
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#kuboard-k8s" class="md-nav__link">
    <span class="md-ellipsis">
      Kuboard K8s管理
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#nacos" class="md-nav__link">
    <span class="md-ellipsis">
      Nacos配置中心
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_10" class="md-nav__link">
    <span class="md-ellipsis">
      自定义镜像示例
    </span>
  </a>
  
    <nav class="md-nav" aria-label="自定义镜像示例">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#python" class="md-nav__link">
    <span class="md-ellipsis">
      Python应用镜像
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#ssh" class="md-nav__link">
    <span class="md-ellipsis">
      带SSH的基础镜像
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#nodejs" class="md-nav__link">
    <span class="md-ellipsis">
      Node.js构建镜像
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#go" class="md-nav__link">
    <span class="md-ellipsis">
      Go构建镜像
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_11" class="md-nav__link">
    <span class="md-ellipsis">
      部署脚本集合
    </span>
  </a>
  
</li>
      
    </ul>
  
</nav>
      
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../network-storage/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    网络与存储
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../docker-compose/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    Docker Compose
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3" >
        
          
          <label class="md-nav__link" for="__nav_3_3" id="__nav_3_3_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    Kubernetes
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_3_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_3_3">
            <span class="md-nav__icon md-icon"></span>
            Kubernetes
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../kubernetes/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    集群部署
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../kubernetes/resources/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    资源管理
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../kubernetes/operations/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    运维操作
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../kubernetes/best-practices/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    最佳实践
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

    
      
      
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
        
          
          <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    DevOps工具链
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_4">
            <span class="md-nav__icon md-icon"></span>
            DevOps工具链
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../cicd/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    CI/CD流水线
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../devops/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    自动化运维
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

    
      
      
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
        
          
          <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    Shell 快速入门
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_5">
            <span class="md-nav__icon md-icon"></span>
            Shell 快速入门
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../../shell/introduction/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    Linux 基础命令
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../../shell/commands/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    常用命令集
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../../shell/variables_and_data_types/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    变量和数据类型
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../../shell/control_flow/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    控制流程 (if、else、for、while)
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../../shell/functions/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    Shell函数
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../../shell/text_processing/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    文本处理三剑客
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../../shell/scripts/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    Shell脚本实战
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

    
  </ul>
</nav>
                  </div>
                </div>
              </div>
            
            
              
              <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    

<nav class="md-nav md-nav--secondary" aria-label="目录">
  
  
  
    
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon"></span>
      目录
    </label>
    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#_1" class="md-nav__link">
    <span class="md-ellipsis">
      数据库服务
    </span>
  </a>
  
    <nav class="md-nav" aria-label="数据库服务">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#mysql" class="md-nav__link">
    <span class="md-ellipsis">
      MySQL部署
    </span>
  </a>
  
    <nav class="md-nav" aria-label="MySQL部署">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#mysql-80" class="md-nav__link">
    <span class="md-ellipsis">
      MySQL 8.0
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#mysql-57" class="md-nav__link">
    <span class="md-ellipsis">
      MySQL 5.7
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
        
          <li class="md-nav__item">
  <a href="#redis" class="md-nav__link">
    <span class="md-ellipsis">
      Redis部署
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#web" class="md-nav__link">
    <span class="md-ellipsis">
      Web服务
    </span>
  </a>
  
    <nav class="md-nav" aria-label="Web服务">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#nginx" class="md-nav__link">
    <span class="md-ellipsis">
      Nginx部署
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#tomcat" class="md-nav__link">
    <span class="md-ellipsis">
      Tomcat部署
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_2" class="md-nav__link">
    <span class="md-ellipsis">
      监控与日志
    </span>
  </a>
  
    <nav class="md-nav" aria-label="监控与日志">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#grafana" class="md-nav__link">
    <span class="md-ellipsis">
      Grafana部署
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#zabbix" class="md-nav__link">
    <span class="md-ellipsis">
      Zabbix部署
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_3" class="md-nav__link">
    <span class="md-ellipsis">
      开发工具
    </span>
  </a>
  
    <nav class="md-nav" aria-label="开发工具">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#gitlab" class="md-nav__link">
    <span class="md-ellipsis">
      GitLab部署
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#jenkins" class="md-nav__link">
    <span class="md-ellipsis">
      Jenkins部署
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_4" class="md-nav__link">
    <span class="md-ellipsis">
      消息队列
    </span>
  </a>
  
    <nav class="md-nav" aria-label="消息队列">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#rocketmq" class="md-nav__link">
    <span class="md-ellipsis">
      RocketMQ部署
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_5" class="md-nav__link">
    <span class="md-ellipsis">
      认证与授权
    </span>
  </a>
  
    <nav class="md-nav" aria-label="认证与授权">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#ldap" class="md-nav__link">
    <span class="md-ellipsis">
      LDAP部署
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#ldap_1" class="md-nav__link">
    <span class="md-ellipsis">
      LDAP密码自助服务部署
    </span>
  </a>
  
    <nav class="md-nav" aria-label="LDAP密码自助服务部署">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#ldap_2" class="md-nav__link">
    <span class="md-ellipsis">
      配置LDAP密码自助服务
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_6" class="md-nav__link">
    <span class="md-ellipsis">
      实际示例配置
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_7" class="md-nav__link">
    <span class="md-ellipsis">
      容器管理
    </span>
  </a>
  
    <nav class="md-nav" aria-label="容器管理">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#portainer" class="md-nav__link">
    <span class="md-ellipsis">
      Portainer部署
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_8" class="md-nav__link">
    <span class="md-ellipsis">
      代理与网关
    </span>
  </a>
  
    <nav class="md-nav" aria-label="代理与网关">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#frp" class="md-nav__link">
    <span class="md-ellipsis">
      Frp内网穿透
    </span>
  </a>
  
    <nav class="md-nav" aria-label="Frp内网穿透">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#frp_1" class="md-nav__link">
    <span class="md-ellipsis">
      Frp服务端
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#frp_2" class="md-nav__link">
    <span class="md-ellipsis">
      Frp客户端
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_9" class="md-nav__link">
    <span class="md-ellipsis">
      其他常用服务
    </span>
  </a>
  
    <nav class="md-nav" aria-label="其他常用服务">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#jumpserver" class="md-nav__link">
    <span class="md-ellipsis">
      JumpServer堡垒机
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#kuboard-k8s" class="md-nav__link">
    <span class="md-ellipsis">
      Kuboard K8s管理
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#nacos" class="md-nav__link">
    <span class="md-ellipsis">
      Nacos配置中心
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_10" class="md-nav__link">
    <span class="md-ellipsis">
      自定义镜像示例
    </span>
  </a>
  
    <nav class="md-nav" aria-label="自定义镜像示例">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#python" class="md-nav__link">
    <span class="md-ellipsis">
      Python应用镜像
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#ssh" class="md-nav__link">
    <span class="md-ellipsis">
      带SSH的基础镜像
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#nodejs" class="md-nav__link">
    <span class="md-ellipsis">
      Node.js构建镜像
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#go" class="md-nav__link">
    <span class="md-ellipsis">
      Go构建镜像
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_11" class="md-nav__link">
    <span class="md-ellipsis">
      部署脚本集合
    </span>
  </a>
  
</li>
      
    </ul>
  
</nav>
                  </div>
                </div>
              </div>
            
          
          
            <div class="md-content" data-md-component="content">
              <article class="md-content__inner md-typeset">
                
                  

  
  


<h1 id="docker">Docker常用服务部署指南</h1>
<h2 id="_1">数据库服务</h2>
<h3 id="mysql">MySQL部署</h3>
<h4 id="mysql-80">MySQL 8.0</h4>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [Docker部署] MySQL 8.0数据库

dataDir=&quot;/opt/docker-data/mysql&quot;
mkdir -p $dataDir

# 卸载mariadb（如果存在）
yum remove mariadb* -y

# 安装MySQL客户端
rpm -ivh https://repo.mysql.com/mysql80-community-release-el7.rpm
yum install mysql-community-client -y

# 生成随机密码并保存
password=$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 12)
echo &quot;MySQL密码: $password&quot; &gt; mysql-password.txt

# 启动MySQL容器
docker run \
    --restart always \
    -d -p 3306:3306 --name mysql \
    -v $dataDir:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=$password \
    mysql:8

echo &quot;MySQL已安装成功。密码已保存到mysql-password.txt&quot;
</code></pre>
<h4 id="mysql-57">MySQL 5.7</h4>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [Docker部署] MySQL 5.7数据库

dataDir=&quot;/opt/docker-data/mysql&quot;
mkdir -p $dataDir

# 启动MySQL 5.7容器
docker run -d --name mysql5.7 \
    -p 3306:3306 \
    -v $dataDir:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=opsbase.cn \
    -e MYSQL_DATABASE=mydb \
    -e MYSQL_USER=myuser \
    -e MYSQL_PASSWORD=mypassword \
    --restart always \
    mysql:5.7 \
    --character-set-server=utf8mb4 \
    --collation-server=utf8mb4_unicode_ci

echo &quot;MySQL 5.7已安装成功。&quot;
</code></pre>
<h3 id="redis">Redis部署</h3>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [Docker部署] Redis缓存服务

dataDir=&quot;/opt/docker-data/redis&quot;
mkdir -p $dataDir
mkdir -p $dataDir/conf

# 创建Redis配置文件
cat &gt; $dataDir/conf/redis.conf &lt;&lt; EOF
requirepass opsbase.cn
appendonly yes
protected-mode no
EOF

# 启动Redis容器
docker run -d --name redis \
  -v $dataDir/data:/data \
  -v $dataDir/conf/redis.conf:/etc/redis/redis.conf \
  -p 6379:6379 \
  --restart always \
  redis:6-alpine redis-server /etc/redis/redis.conf

echo &quot;Redis已安装成功。密码: opsbase.cn&quot;
</code></pre>
<h2 id="web">Web服务</h2>
<h3 id="nginx">Nginx部署</h3>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [Docker部署] Nginx Web服务器

dataDir=&quot;/opt/docker-data/nginx&quot;
mkdir -p $dataDir/conf
mkdir -p $dataDir/html
mkdir -p $dataDir/logs

# 创建默认配置文件
cat &gt; $dataDir/conf/default.conf &lt;&lt; EOF
server {
    listen       80;
    server_name  localhost;

    access_log  /var/log/nginx/host.access.log  main;
    error_log   /var/log/nginx/error.log  error;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
EOF

# 创建默认HTML页面
cat &gt; $dataDir/html/index.html &lt;&lt; EOF
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Welcome to Nginx!&lt;/title&gt;
&lt;style&gt;
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Welcome to Nginx!&lt;/h1&gt;
&lt;p&gt;If you see this page, the nginx web server is successfully installed and
working.&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;
EOF

# 启动Nginx容器
docker run -d --name nginx \
  -p 80:80 \
  -v $dataDir/html:/usr/share/nginx/html \
  -v $dataDir/conf:/etc/nginx/conf.d \
  -v $dataDir/logs:/var/log/nginx \
  --restart always \
  nginx:alpine

echo &quot;Nginx已安装成功。&quot;
</code></pre>
<h3 id="tomcat">Tomcat部署</h3>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [Docker部署] Tomcat应用服务器

dataDir=&quot;/opt/docker-data/tomcat&quot;
mkdir -p $dataDir/webapps
mkdir -p $dataDir/logs
mkdir -p $dataDir/conf

# 启动Tomcat容器
docker run -d --name tomcat \
  -p 8080:8080 \
  -v $dataDir/webapps:/usr/local/tomcat/webapps \
  -v $dataDir/logs:/usr/local/tomcat/logs \
  -v $dataDir/conf:/usr/local/tomcat/conf \
  --restart always \
  tomcat:9-jdk11-openjdk

echo &quot;Tomcat已安装成功。访问地址: http://localhost:8080&quot;
</code></pre>
<h2 id="_2">监控与日志</h2>
<h3 id="grafana">Grafana部署</h3>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [Docker部署] Grafana监控面板

dataDir=&quot;/opt/docker-data/grafana&quot;
mkdir -p $dataDir

# 启动Grafana容器
docker run -d --name grafana \
  -p 3000:3000 \
  -v $dataDir:/var/lib/grafana \
  -e &quot;GF_SECURITY_ADMIN_PASSWORD=opsbase.cn&quot; \
  -e &quot;GF_USERS_ALLOW_SIGN_UP=false&quot; \
  --restart always \
  grafana/grafana:latest

echo &quot;Grafana已安装成功。&quot;
echo &quot;访问地址: http://localhost:3000&quot;
echo &quot;默认用户名: admin&quot;
echo &quot;默认密码: opsbase.cn&quot;
</code></pre>
<h3 id="zabbix">Zabbix部署</h3>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [Docker部署] Zabbix监控系统

# 创建Docker网络
docker network create zabbix-network

# 启动MySQL容器
docker run -d --name zabbix-mysql \
  --network zabbix-network \
  -v /opt/docker-data/zabbix/mysql:/var/lib/mysql \
  -e MYSQL_DATABASE=zabbix \
  -e MYSQL_USER=zabbix \
  -e MYSQL_PASSWORD=zabbix_pwd \
  -e MYSQL_ROOT_PASSWORD=root_pwd \
  --restart always \
  mysql:8.0 \
  --character-set-server=utf8 --collation-server=utf8_bin \
  --default-authentication-plugin=mysql_native_password

# 启动Zabbix Server容器
docker run -d --name zabbix-server \
  --network zabbix-network \
  -v /opt/docker-data/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \
  -v /opt/docker-data/zabbix/externalscripts:/usr/lib/zabbix/externalscripts \
  -e DB_SERVER_HOST=zabbix-mysql \
  -e MYSQL_DATABASE=zabbix \
  -e MYSQL_USER=zabbix \
  -e MYSQL_PASSWORD=zabbix_pwd \
  -e MYSQL_ROOT_PASSWORD=root_pwd \
  -p 10051:10051 \
  --restart always \
  zabbix/zabbix-server-mysql:ubuntu-5.0-latest

# 启动Zabbix Web容器
docker run -d --name zabbix-web \
  --network zabbix-network \
  -e DB_SERVER_HOST=zabbix-mysql \
  -e MYSQL_DATABASE=zabbix \
  -e MYSQL_USER=zabbix \
  -e MYSQL_PASSWORD=zabbix_pwd \
  -e MYSQL_ROOT_PASSWORD=root_pwd \
  -e ZBX_SERVER_HOST=zabbix-server \
  -e PHP_TZ=Asia/Shanghai \
  -p 80:8080 \
  --restart always \
  zabbix/zabbix-web-apache-mysql:ubuntu-5.0-latest

echo &quot;Zabbix已安装成功。&quot;
echo &quot;访问地址: http://localhost&quot;
echo &quot;默认用户名: Admin&quot;
echo &quot;默认密码: zabbix&quot;
</code></pre>
<h2 id="_3">开发工具</h2>
<h3 id="gitlab">GitLab部署</h3>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [Docker部署] GitLab代码仓库

dataDir=&quot;/opt/docker-data/gitlab&quot;
mkdir -p $dataDir/config
mkdir -p $dataDir/logs
mkdir -p $dataDir/data

# 启动GitLab容器
docker run -d --name gitlab \
  -p 443:443 \
  -p 80:80 \
  -p 22:22 \
  -v $dataDir/config:/etc/gitlab \
  -v $dataDir/logs:/var/log/gitlab \
  -v $dataDir/data:/var/opt/gitlab \
  -e GITLAB_OMNIBUS_CONFIG=&quot;external_url 'http://gitlab.example.com';&quot; \
  --restart always \
  gitlab/gitlab-ce:latest

echo &quot;GitLab已安装成功，初始化可能需要几分钟时间。&quot;
echo &quot;访问地址: http://localhost&quot;
echo &quot;首次登录时，系统会要求设置root用户密码。&quot;
</code></pre>
<h3 id="jenkins">Jenkins部署</h3>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [Docker部署] Jenkins CI/CD工具

dataDir=&quot;/opt/docker-data/jenkins&quot;
mkdir -p $dataDir

# 设置目录权限
chown -R 1000:1000 $dataDir

# 启动Jenkins容器
docker run -d --name jenkins \
  -p 8080:8080 \
  -p 50000:50000 \
  -v $dataDir:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  --restart always \
  jenkins/jenkins:lts

# 获取初始管理员密码
echo &quot;Jenkins已安装成功。&quot;
echo &quot;请等待Jenkins完全启动后，使用以下命令获取初始管理员密码：&quot;
echo &quot;docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword&quot;
echo &quot;访问地址: http://localhost:8080&quot;
</code></pre>
<h2 id="_4">消息队列</h2>
<h3 id="rocketmq">RocketMQ部署</h3>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [Docker部署] RocketMQ消息队列

# 创建数据目录
mkdir -p /opt/docker-data/rocketmq/namesrv/logs
mkdir -p /opt/docker-data/rocketmq/namesrv/store
mkdir -p /opt/docker-data/rocketmq/broker/logs
mkdir -p /opt/docker-data/rocketmq/broker/store
mkdir -p /opt/docker-data/rocketmq/broker/conf

# 创建broker配置文件
cat &gt; /opt/docker-data/rocketmq/broker/conf/broker.conf &lt;&lt; EOF
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1 = host.docker.internal
EOF

# 启动NameServer
docker run -d --name rmqnamesrv \
  -p 9876:9876 \
  -v /opt/docker-data/rocketmq/namesrv/logs:/home/rocketmq/logs \
  -v /opt/docker-data/rocketmq/namesrv/store:/home/rocketmq/store \
  -e &quot;MAX_POSSIBLE_HEAP=100000000&quot; \
  --restart always \
  apache/rocketmq:4.9.3 \
  sh mqnamesrv

# 启动Broker
docker run -d --name rmqbroker \
  -p 10909:10909 \
  -p 10911:10911 \
  -v /opt/docker-data/rocketmq/broker/logs:/home/rocketmq/logs \
  -v /opt/docker-data/rocketmq/broker/store:/home/rocketmq/store \
  -v /opt/docker-data/rocketmq/broker/conf/broker.conf:/home/rocketmq/rocketmq-4.9.3/conf/broker.conf \
  -e &quot;NAMESRV_ADDR=host.docker.internal:9876&quot; \
  -e &quot;MAX_POSSIBLE_HEAP=200000000&quot; \
  --restart always \
  apache/rocketmq:4.9.3 \
  sh mqbroker -c /home/rocketmq/rocketmq-4.9.3/conf/broker.conf

# 启动RocketMQ控制台
docker run -d --name rmqdashboard \
  -p 8080:8080 \
  -e &quot;JAVA_OPTS=-Drocketmq.namesrv.addr=host.docker.internal:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false&quot; \
  --restart always \
  apacherocketmq/rocketmq-dashboard:latest

echo &quot;RocketMQ已安装成功。&quot;
echo &quot;NameServer地址: localhost:9876&quot;
echo &quot;Dashboard访问地址: http://localhost:8080&quot;
</code></pre>
<h2 id="_5">认证与授权</h2>
<h3 id="ldap">LDAP部署</h3>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [Docker部署] OpenLDAP目录服务

# 创建数据目录
mkdir -p /opt/docker-data/ldap/data
mkdir -p /opt/docker-data/ldap/config

# 启动OpenLDAP容器
docker run -d --name openldap \
  -p 389:389 \
  -p 636:636 \
  -v /opt/docker-data/ldap/data:/var/lib/ldap \
  -v /opt/docker-data/ldap/config:/etc/ldap/slapd.d \
  -e LDAP_ORGANISATION=&quot;My Company&quot; \
  -e LDAP_DOMAIN=&quot;example.org&quot; \
  -e LDAP_ADMIN_PASSWORD=&quot;admin&quot; \
  --restart always \
  osixia/openldap:latest

# 启动phpLDAPadmin容器
docker run -d --name phpldapadmin \
  -p 8080:80 \
  -e PHPLDAPADMIN_LDAP_HOSTS=openldap \
  --link openldap:openldap \
  --restart always \
  osixia/phpldapadmin:latest

echo &quot;OpenLDAP已安装成功。&quot;
echo &quot;LDAP服务地址: ldap://localhost:389&quot;
echo &quot;管理员DN: cn=admin,dc=example,dc=org&quot;
echo &quot;管理员密码: admin&quot;
echo &quot;phpLDAPadmin访问地址: http://localhost:8080&quot;
echo &quot;phpLDAPadmin登录DN: cn=admin,dc=example,dc=org&quot;
</code></pre>
<h3 id="ldap_1">LDAP密码自助服务部署</h3>
<p>使用LDAP自助密码重置服务(LDAP Self Service Password)可以允许用户在忘记密码时自行重置密码，而无需管理员介入。</p>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [Docker部署] LDAP密码自助服务

# 创建数据目录
mkdir -p /opt/ldap-data/www

# 停止并移除已有容器（如果存在）
docker stop ldap-pass
docker rm ldap-pass

# 启动LDAP密码自助服务容器
docker run -d \
  --name ldap-pass \
  -p 8096:80 \
  -v /opt/ldap-data/www:/var/www \
  --restart always \
  ltbproject/self-service-password

# 设置适当的权限
docker exec -it ldap-pass chown -R www-data:www-data /var/www/{cache,conf,html,templates_c}

echo &quot;LDAP密码自助服务已部署成功！&quot;
echo &quot;访问地址: http://localhost:8096&quot;
echo &quot;请确保修改配置文件: /opt/ldap-data/www/conf/config.inc.php&quot;
</code></pre>
<h4 id="ldap_2">配置LDAP密码自助服务</h4>
<p>首次安装后，需要配置LDAP连接信息和邮件服务。以下是配置示例:</p>
<pre><code class="language-bash"># 编辑配置文件
vi /opt/ldap-data/www/conf/config.inc.php

# 主要配置内容示例
</code></pre>
<pre><code class="language-php">&lt;?php
// LDAP密码自助服务配置

// 开启调试模式
$debug = true;

// LDAP配置
$ldap_starttls = false;
$ldap_url = &quot;ldap://your-ldap-server:1389&quot;;
$ldap_binddn = &quot;cn=admin,dc=example,dc=org&quot;;
$ldap_bindpw = &quot;your-ldap-admin-password&quot;;
$ldap_base = &quot;ou=users,dc=example,dc=org&quot;;

$ldap_login_attribute = &quot;cn&quot;;
$ldap_fullname_attribute = &quot;cn&quot;;
$ldap_filter = &quot;(&amp;(objectClass=inetOrgPerson)($ldap_login_attribute={login}))&quot;;

// 邮件配置（用于发送重置密码链接）
$mail_from = &quot;admin@example.org&quot;;
$mail_from_name = &quot;Self Service Password&quot;;
$mail_smtp_host = &quot;smtp.example.org&quot;;
$mail_smtp_auth = true;
$mail_smtp_user = &quot;smtp-user&quot;;
$mail_smtp_pass = &quot;smtp-password&quot;;
$mail_smtp_port = 587;
$mail_smtp_secure = 'tls';

// 允许使用的重置密码方法
$use_tokens = true;      // 通过邮件发送令牌
$use_questions = true;   // 使用安全问题
$use_sms = false;        // 使用短信
?&gt;
</code></pre>
<h4 id="_6">实际示例配置</h4>
<p>下面是一个实际配置示例，用于连接到特定LDAP服务器:</p>
<pre><code class="language-php">&lt;?php
// LDAP配置示例

$debug = true;

// LDAP
$ldap_starttls = false;
$ldap_url = &quot;ldap://35.78.130.163:1389&quot;;
$ldap_binddn = &quot;cn=admin,dc=coinq,dc=com&quot;;
$ldap_bindpw = &quot;A0PYcHNmoihWx5Hk&quot;;
$ldap_base = &quot;ou=users,dc=coinq,dc=com&quot;;

$ldap_login_attribute = &quot;cn&quot;;
$ldap_fullname_attribute = &quot;cn&quot;;
$ldap_filter = &quot;(&amp;(objectClass=inetOrgPerson)($ldap_login_attribute={login}))&quot;;
?&gt;
</code></pre>
<h2 id="_7">容器管理</h2>
<h3 id="portainer">Portainer部署</h3>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [Docker部署] Portainer容器管理平台

# 创建数据目录
mkdir -p /opt/docker-data/portainer

# 启动Portainer容器
docker run -d --name portainer \
  -p 9000:9000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /opt/docker-data/portainer:/data \
  --restart always \
  portainer/portainer-ce:latest

echo &quot;Portainer已安装成功。&quot;
echo &quot;访问地址: http://localhost:9000&quot;
echo &quot;首次访问时，需要创建管理员用户。&quot;
</code></pre>
<h2 id="_8">代理与网关</h2>
<h3 id="frp">Frp内网穿透</h3>
<h4 id="frp_1">Frp服务端</h4>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [Docker部署] Frp服务端

# 创建配置目录
mkdir -p /opt/docker-data/frps

# 创建frps.ini配置文件
cat &gt; /opt/docker-data/frps/frps.ini &lt;&lt; EOF
[common]
bind_port = 7000
token = opsbase.cn
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
EOF

# 启动Frp服务端容器
docker run -d --name frps \
  -p 7000:7000 \
  -p 7500:7500 \
  -v /opt/docker-data/frps/frps.ini:/etc/frp/frps.ini \
  --restart always \
  snowdreamtech/frps:0.37.0

echo &quot;Frp服务端已安装成功。&quot;
echo &quot;服务端口: 7000&quot;
echo &quot;管理界面: http://localhost:7500&quot;
echo &quot;管理用户名: admin&quot;
echo &quot;管理密码: admin&quot;
</code></pre>
<h4 id="frp_2">Frp客户端</h4>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [Docker部署] Frp客户端

# 创建配置目录
mkdir -p /opt/docker-data/frpc

# 创建frpc.ini配置文件
cat &gt; /opt/docker-data/frpc/frpc.ini &lt;&lt; EOF
[common]
server_addr = frp服务器IP
server_port = 7000
token = opsbase.cn

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[web]
type = http
local_ip = 127.0.0.1
local_port = 80
custom_domains = your-domain.com
EOF

# 启动Frp客户端容器
docker run -d --name frpc \
  -v /opt/docker-data/frpc/frpc.ini:/etc/frp/frpc.ini \
  --network host \
  --restart always \
  snowdreamtech/frpc:0.37.0

echo &quot;Frp客户端已安装成功。&quot;
echo &quot;请确保frpc.ini中的server_addr已设置为您的Frp服务器IP地址。&quot;
</code></pre>
<h2 id="_9">其他常用服务</h2>
<h3 id="jumpserver">JumpServer堡垒机</h3>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [Docker部署] JumpServer堡垒机

# 创建工作目录
mkdir -p /opt/jumpserver
cd /opt/jumpserver

# 下载JumpServer安装脚本
curl -sSL https://github.com/jumpserver/installer/releases/latest/download/quick_start.sh -o quick_start.sh
chmod +x quick_start.sh

# 安装JumpServer
./quick_start.sh

echo &quot;JumpServer已安装成功。&quot;
echo &quot;访问地址: https://服务器IP:443&quot;
echo &quot;管理员用户名: admin&quot;
echo &quot;管理员密码: admin&quot;
</code></pre>
<h3 id="kuboard-k8s">Kuboard K8s管理</h3>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [Docker部署] Kuboard Kubernetes管理平台

# 启动Kuboard容器
docker run -d \
  --name kuboard \
  -p 80:80/tcp \
  -p 10081:10081/tcp \
  -e KUBOARD_ENDPOINT=&quot;http://内网IP:80&quot; \
  -e KUBOARD_AGENT_SERVER_TCP_PORT=&quot;10081&quot; \
  -v /opt/docker-data/kuboard:/data \
  --restart always \
  eipwork/kuboard:v3

echo &quot;Kuboard已安装成功。&quot;
echo &quot;访问地址: http://服务器IP:80&quot;
echo &quot;默认用户名: admin&quot;
echo &quot;默认密码: Kuboard123&quot;
</code></pre>
<h3 id="nacos">Nacos配置中心</h3>
<pre><code class="language-yaml"># docker-compose-nacos.yml
version: '3'
services:
  nacos:
    image: nacos/nacos-server:latest
    container_name: nacos
    environment:
      - MODE=standalone
      - JVM_XMS=256m
      - JVM_XMX=512m
    volumes:
      - /opt/docker-data/nacos/logs:/home/nacos/logs
      - /opt/docker-data/nacos/data:/home/nacos/data
    ports:
      - &quot;8848:8848&quot;
      - &quot;9848:9848&quot;
      - &quot;9849:9849&quot;
    restart: always
</code></pre>
<p>部署命令：</p>
<pre><code class="language-bash">mkdir -p /opt/docker-data/nacos/logs
mkdir -p /opt/docker-data/nacos/data
docker-compose -f docker-compose-nacos.yml up -d
</code></pre>
<h2 id="_10">自定义镜像示例</h2>
<h3 id="python">Python应用镜像</h3>
<pre><code class="language-dockerfile"># dockerfile.python-alpine
FROM python:3.9-alpine

LABEL maintainer=&quot;Loganli&quot;

# 安装依赖
RUN apk add --no-cache --virtual .build-deps \
    gcc \
    musl-dev \
    python3-dev \
    libffi-dev \
    openssl-dev \
    &amp;&amp; pip install --no-cache-dir \
    flask \
    gunicorn \
    gevent \
    requests \
    &amp;&amp; apk del .build-deps

# 设置工作目录
WORKDIR /app

# 复制应用代码
COPY . .

# 暴露端口
EXPOSE 5000

# 启动命令
CMD [&quot;gunicorn&quot;, &quot;--bind&quot;, &quot;0.0.0.0:5000&quot;, &quot;--workers&quot;, &quot;4&quot;, &quot;--worker-class&quot;, &quot;gevent&quot;, &quot;app:app&quot;]
</code></pre>
<h3 id="ssh">带SSH的基础镜像</h3>
<pre><code class="language-dockerfile"># dockerfile.sshd-alpine
FROM alpine:3.14

LABEL maintainer=&quot;Loganli&quot;

# 安装SSH服务
RUN apk add --no-cache openssh bash \
    &amp;&amp; ssh-keygen -A \
    &amp;&amp; echo &quot;root:opsbase.cn&quot; | chpasswd

# 创建SSH配置
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config \
    &amp;&amp; sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config

# 暴露SSH端口
EXPOSE 22

# 启动SSH服务
CMD [&quot;/usr/sbin/sshd&quot;, &quot;-D&quot;]
</code></pre>
<h3 id="nodejs">Node.js构建镜像</h3>
<pre><code class="language-dockerfile"># dockerfile.build-node
FROM node:14-alpine

LABEL maintainer=&quot;Loganli&quot;

# 安装构建工具
RUN apk add --no-cache \
    git \
    python3 \
    make \
    g++ \
    &amp;&amp; npm install -g \
    yarn \
    pm2 \
    @vue/cli \
    typescript \
    webpack \
    webpack-cli

# 设置工作目录
WORKDIR /app

# 设置npm镜像
RUN npm config set registry https://registry.npm.taobao.org

# 设置时区
ENV TZ=Asia/Shanghai

# 默认命令
CMD [&quot;sh&quot;]
</code></pre>
<h3 id="go">Go构建镜像</h3>
<pre><code class="language-dockerfile"># dockerfile.build-golang
FROM golang:1.17-alpine

LABEL maintainer=&quot;Loganli&quot;

# 安装构建工具
RUN apk add --no-cache \
    git \
    make \
    gcc \
    musl-dev

# 设置Go环境变量
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn,direct

# 设置工作目录
WORKDIR /app

# 默认命令
CMD [&quot;sh&quot;]
</code></pre>
<h2 id="_11">部署脚本集合</h2>
<p>可以将上述部署脚本整合到一个统一的部署工具中：</p>
<p>```bash</p>
<h1 id="binbash">!/bin/bash</h1>
<h1 id="author-loganli">@author Loganli</h1>
<h1 id="docker_1">[Docker工具] 服务部署工具集</h1>
<h1 id="_12">显示菜单</h1>
<p>show_menu() {
    clear
    echo "========== Docker服务部署工具 =========="
    echo "1. 部署MySQL 8.0"
    echo "2. 部署MySQL 5.7"
    echo "3. 部署Redis"
    echo "4. 部署Nginx"
    echo "5. 部署Tomcat"
    echo "6. 部署Grafana"
    echo "7. 部署Zabbix"
    echo "8. 部署GitLab"
    echo "9. 部署Jenkins"
    echo "10. 部署RocketMQ"
    echo "11. 部署OpenLDAP"
    echo "12. 部署Portainer"
    echo "13. 部署Frp服务端"
    echo "14. 部署Frp客户端"
    echo "15. 部署JumpServer"
    echo "16. 部署Kuboard"
    echo "17. 部署Nacos"
    echo "0. 退出"
    echo "========================================"
}</p>
<h1 id="_13">主函数</h1>
<p>main() {
    while true; do
        show_menu
        read -p "请输入选项 [0-17]: " choice
        case $choice in
            1) deploy_mysql8 ;;
            2) deploy_mysql57 ;;
            3) deploy_redis ;;
            4) deploy_nginx ;;
            5) deploy_tomcat ;;
            6) deploy_grafana ;;
            7) deploy_zabbix ;;
            8) deploy_gitlab ;;
            9) deploy_jenkins ;;
            10) deploy_rocketmq ;;
            11) deploy_openldap ;;
            12) deploy_portainer ;;
            13) deploy_frps ;;
            14) deploy_frpc ;;
            15) deploy_jumpserver ;;
            16) deploy_kuboard ;;
            17) deploy_nacos ;;
            0) exit 0 ;;
            *) echo "无效选项，请重新选择" ;;
        esac
        echo
        read -p "按Enter键继续..."
    done
}</p>
<h1 id="_14">执行主函数</h1>
<p>main</p>












                
              </article>
            </div>
          
          
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
        </div>
        
      </main>
      
        <footer class="md-footer">
  
  <div class="md-footer-meta md-typeset">
    <div class="md-footer-meta__inner md-grid">
      <div class="md-copyright">
  
  
    Made with
    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
      Material for MkDocs
    </a>
  
</div>
      
        <div class="md-social">
  
    
    
    
    
      
      
    
    <a href="https://git.opsx.vip/docs/PythonFullStackGuide.git" target="_blank" rel="noopener" title="git.opsx.vip" class="md-social__link">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
    </a>
  
    
    
    
    
    <a href="mailto:admin@attacker.club" target="_blank" rel="noopener" title="" class="md-social__link">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4l217.6 163.2c11.4 8.5 27 8.5 38.4 0l217.6-163.2c12.1-9.1 19.2-23.3 19.2-38.4 0-26.5-21.5-48-48-48zM0 176v208c0 35.3 28.7 64 64 64h384c35.3 0 64-28.7 64-64V176L294.4 339.2a63.9 63.9 0 0 1-76.8 0z"/></svg>
    </a>
  
</div>
      
    </div>
  </div>
</footer>
      
    </div>
    <div class="md-dialog" data-md-component="dialog">
      <div class="md-dialog__inner md-typeset"></div>
    </div>
    
    
    <script id="__config" type="application/json">{"base": "../../..", "features": [], "search": "../../../assets/javascripts/workers/search.f8cc74c7.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}}</script>
    
    
      <script src="../../../assets/javascripts/bundle.60a45f97.min.js"></script>
      
        <script src="../../../js/prism.js"></script>
      
    
  </body>
</html>